/**
 * Copyright (C), 2021-2023, 四信物联网有限公司
 * FileName: Session
 * Author:   Chapin
 * Date:     2023/10/13 11:46
 * Description: 会话管理接口
 * History:
 * <author>          <time>          <version>          <desc>
 * 作者姓名           修改时间           版本号              描述
 */
package com.fourfaith.iot.beidou.session;


import io.netty.channel.Channel;

import java.util.Map;

/**
 * 〈会话管理接口〉
 * @author Chapin
 * @create 2023/10/13
 * @since 1.0.0
 */
public interface Session {

    /**
     * 绑定会话 ，客户端建立连接时进行绑定
     * @param channel   哪个channel 要绑定会话
     * @param deviceCode  设备编码
     */
    void bind(Channel channel, String deviceCode);

    /**
     * 解绑会话 ，客户端断开连接时进行解绑
     * @param channel   哪个channel要解绑会话
     */
    void unbind(Channel channel);

    /**
     * 获取属性
     * @param channel   channel通道
     * @param name  属性名
     * @return  属性值
     */
    Object getAttribute(Channel channel, String name);

    /**
     * 设置属性
     * @param channel channel通道
     * @param name 属性名
     * @param value 属性值
     */
    void setAttribute(Channel channel, String name, Object value);

    /**
     * 根据设备编码获取channel
     * @param deviceCode
     * @return
     */
    Channel getChannel(String deviceCode);

    /**
     * 获取channelMap对象
     * @return
     */
    Map<Channel, String> getChannelMap();
}